package edu.object_oriented.API;

import java.util.*;

public class ArrayDemo {

    /**
     * list 、set 、map
     * list:最简单 java.util.List
     *  数组：定义时，长度是不可改变的
     *  List：长度可变的数组
     * List--- > collection----->Iterable
     * List:
     *      ArrayList:
     *      LinkedList:
     */
    public static void main(String[] args) {
        //ArrayList
        //<> 泛型    集合 保存数据   数据什么类型，<>指定什么类型,
        // 如果不指定，默认就是Object
        ArrayList list = new ArrayList();
        //添加数据
        list.add(1);
        list.add("2");
        list.add(new Date());
        //一般建议指定泛型   只需要指定前面即可
        ArrayList<String> array = new ArrayList<>();
        array.add("1");
//        array.add(1);
        //list是有序的可重复的
        array.add("2");
        array.add("3");
        array.add("4");
        //指定下标 添加元素   类似于插入数据
        array.add(2,"20");
        System.out.println("array = " + array);
        //获取指定位置的元素  根据下标
        String s = array.get(1);
        System.out.println("s = " + s);
        //替换元素  修改
        array.set(2,"22");
        System.out.println(array);
        //移除  根据下标移除
        array.remove(2);
        System.out.println(array);
        //删除指定的元素
        array.remove("4");
        System.out.println("array = " + array);
        //contains     isEmpty 自行测试即可
//        array.isEmpty()
        // indexOf 从前往后查询元素的位置

        //集合的遍历
        User user = new User("tom", 20);
        User user2 = new User("jack", 20);
        User user3 = new User("rose", 20);
        User user4 = new User("lucy", 20);
        ArrayList<User> userList = new ArrayList<>();

        userList.add(user);
        userList.add(user2);
        userList.add(user3);
        userList.add(user4);
        //如何遍历集合数据   和数组同理   size 集合长度
        for (int i = 0; i < userList.size(); i++) {
            User u = userList.get(i);
            System.out.println("u = " + u);
        }
        System.out.println("------------------------------------");
        for (User user1 : userList) {
            System.out.println(user1);
        }
        //iterator 获取一个迭代器   用于遍历   只能用while
        Iterator<User> iterator = userList.iterator();
        //hasNext  判断当前迭代器中是否还有元素   有返回true
        while (iterator.hasNext()){
            //获取当前迭代器中的元素
            User next = iterator.next();
            System.out.println("next = " + next);
        }
        System.out.println("-------------------------");
        //新写法
        userList.forEach(user1 -> System.out.println(user1));

    }

}

class User{

    String name;
    int age;

    public User(String name,int age){
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

